<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
</head>

<body>
    <!--这里是样式-->
</body>

</html>
<script>
    //这里是逻辑
    // 都是用来改变函数的this 指向的
    // 第一个参数都是this要指向的对象
    // 都是可以利用后续的参数传参
    var xw = {
        name: "小王",
        gender: "男",
        age: 24,
        say: function () {
            alert(this.name + " , " + this.gender + " ,今年" + this.age);
        }
    }
    var xh = {
        name: "小红",
        gender: "女",
        age: 18
    }
    xw.say();
    // 复制代码
    // 本身没什么好说的，显示的肯定是小王 ， 男 ， 今年24。
    // 那么如何用xw的say方法来显示xh的数据呢。
    // 对于call可以这样：
    xw.say.call(xh);
    xw.say.apply(xh);
    xw.say.bind(xh)();



    var xw = {
        name: "小王",
        gender: "男",
        age: 24,
        say: function (school, grade) {
            alert(this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade);
        }
    }
    var xh = {
        name: "小红",
        gender: "女",
        age: 18
    }
    // 复制代码
    // 可以看到say方法多了两个参数，我们通过call / apply的参数进行传参。
    // 对于call来说是这样的

    xw.say.call(xh, "实验小学", "六年级");
    // 复制代码
    // 而对于apply来说是这样的

    xw.say.apply(xh, ["实验小学", "六年级郑州牛皮癣医院"]);
    // 复制代码
    // 看到区别了吗，call后面的参数与say方法中是一一对应的，而apply的第二个参数是一个数组，数组中的元素是和say方法中一一对应的，这就是两者最大的区别。

    // 但是由于bind返回的仍然是一个函数，所以我们还可以在调用的时候再进行传参。

    xw.say.bind(xh)("实验小学", "六年级");













</script>